/*
 * Universidad del Valle de Guatemala
 * Algoritmos y estructura de datos
 * 
 */
package Radio;
import Interface.Radio;

/**
 *
 * @author Jonathan López, 11106
 * @author Luis Valdeavellano, 11218
 * @author Carlos Álvarez, 11004
 */

public class CarroRadio implements Radio {
    
    private String banda;
    private boolean on;
    private float frecuenciaActual;
    private String guardados_b[];
    private float guardados_f[];
        
    /**
     * Inicializa el radio
     */
    public CarroRadio() {
        banda="AM";
        on = false;
        frecuenciaActual = AM_MIN;
        guardados_b = new String[12];
        guardados_f = new float[12];
    }

    /**
     * Indica si el radio está encendido o apagado
     * @return 
     */
    @Override
    public boolean isOn() {
        return on;
    }

    /**
     * Cambia el estado del radio entre encendido/apagado
     */
    @Override
    public void onOff() {
        if (isOn()){
            on=false;
        }else on = true;
    }

    /**
     * Cambia la banda entre AM/FM
     */
    @Override
    public void cambiarBanda() {
        if (isAM()){
            banda="FM";
        }else if (isFM()){
            banda = "AM";
        }
    }

    /**
     * Cambia la frecuencia respetando las instrucciones 
     * de AM y FM
     */
    @Override
    public void cambiarFrecuencia() {
        if (isFM()) {
            frecuenciaActual+=FM_D;
            if (frecuenciaActual>FM_MAX || frecuenciaActual<FM_MIN) frecuenciaActual=FM_MIN;
        } else if (isAM()) {
            frecuenciaActual+=AM_D;
            if (frecuenciaActual>AM_MAX || frecuenciaActual<AM_MIN) frecuenciaActual=AM_MIN;
        }
    }

    /**
     * 
     * @param boton 
     */
    @Override
    public void guardarEstacion(int boton) {
        guardados_b[boton] = (isFM()?"FM":"AM");
        guardados_f[boton] = getFrecuencia();
    }

    /**
     * 
     * @param boton 
     */
    @Override
    public void seleccionarEstacion(int boton) {
        if(guardados_b[boton].equals("AM") || guardados_b[boton].equals("FM")){
            banda = guardados_b[boton];
            frecuenciaActual = guardados_f[boton];
        } else throw new NullPointerException();
    }

    /**
     * Devuelve la frecuencia actual, ya sea en AM o FM
     */
    @Override
    public float getFrecuencia(){
            return frecuenciaActual;
    }

    /**
     * Devuelve si AM está sintonizado
     * @return 
     */
    @Override
    public boolean isAM() {
        if (banda.equals("AM")) return true;
        else return false;
    }

    /**
     * Devuelve si FM está sintonizado
     * @return 
     */
    @Override
    public boolean isFM() {
        if (banda.equals("FM")) return true;
        else return false;
    }
    
}